package com.itfs.strategy;

import java.util.HashMap;
import java.util.Map;

public class StrategyFactory {

    //这里使用容器式的单例模式，使用饿汉式，先将所有的策略对象进行注入到容器中
    private static Map<String,DiscountStrategy> STRATEGY_MAP =
            new HashMap<String,DiscountStrategy>();

    //使用静态代码块进行初始化，实际上就是饿汉式，程序启动就初始化实例
    static{
        //将优惠策略名称作为key，对应的策略实例作为value
        STRATEGY_MAP.put(strategyKey.Regular,new RegularMembers());
        STRATEGY_MAP.put(strategyKey.Year,new YearMembers());
        STRATEGY_MAP.put(strategyKey.Permanent,new PermanentMembers());
    }

    //私有化构造方法
    private StrategyFactory(){}
    //定义一个内部接口
    private interface strategyKey{
        //定义每个优惠策略的对应的key名称
        String Regular = "Regular";
        String Year = "Year";
        String Permanent = "Permanent";
    }

    //提供根据策略key获取到对应的策略实例,这里代表的是策略模式
    public static DiscountStrategy getDiscountStrategy(String strategyKey){
        return STRATEGY_MAP.get(strategyKey);
    }
}